home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / shisen.c < prev    next >
C/C++ Source or Header  |  2000-04-23  |  2KB  |  85 lines

  1. #include "driver.h"
  2. #include "vidhrdw/generic.h"
  3.  
  4. static int gfxbank;
  5.  
  6.  
  7. WRITE_HANDLER( sichuan2_bankswitch_w )
  8. {
  9.     int bankaddress;
  10.     unsigned char *RAM = memory_region(REGION_CPU1);
  11.  
  12. if (data & 0xc0) logerror("bank switch %02x\n",data);
  13.  
  14.  
  15.     /* bits 0-2 select ROM bank */
  16.     bankaddress = 0x10000 + (data & 0x07) * 0x4000;
  17.     cpu_setbank(1,&RAM[bankaddress]);
  18.  
  19.     /* bits 3-5 select gfx bank */
  20.     if (gfxbank != ((data & 0x38) >> 3))
  21.     {
  22.         gfxbank = (data & 0x38) >> 3;
  23.         memset(dirtybuffer,1,videoram_size);
  24.     }
  25.  
  26.     /* bits 6-7 unknown */
  27. }
  28.  
  29.  
  30. WRITE_HANDLER( sichuan2_paletteram_w )
  31. {
  32.     int r,g,b;
  33.  
  34.     paletteram[offset] = data;
  35.  
  36.     offset &= 0xff;
  37.  
  38.     r = paletteram[offset+0x000] & 0x1f;
  39.     g = paletteram[offset+0x100] & 0x1f;
  40.     b = paletteram[offset+0x200] & 0x1f;
  41.     r = (r << 3) | (r >> 2);
  42.     g = (g << 3) | (g >> 2);
  43.     b = (b << 3) | (b >> 2);
  44.  
  45.     palette_change_color(offset,r,g,b);
  46. }
  47.  
  48.  
  49.  
  50. void sichuan2_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
  51. {
  52.     int offs;
  53.  
  54.  
  55.     if (palette_recalc())
  56.         memset(dirtybuffer,1,videoram_size);
  57.  
  58.     /* for every character in the Video RAM, check if it has been modified */
  59.     /* since last time and update it accordingly. */
  60.     for (offs = videoram_size-2;offs >= 0;offs -= 2)
  61.     {
  62.         if (dirtybuffer[offs] || dirtybuffer[offs+1])
  63.         {
  64.             int sx,sy;
  65.  
  66.  
  67.             dirtybuffer[offs] = dirtybuffer[offs+1] = 0;
  68.  
  69.             sx = (offs/2) % 64;
  70.             sy = (offs/2) / 64;
  71.  
  72.             drawgfx(tmpbitmap,Machine->gfx[0],
  73.                     videoram[offs] + ((videoram[offs+1] & 0x0f) << 8) + (gfxbank << 12),
  74.                     (videoram[offs+1] & 0xf0) >> 4,
  75.                     0,0,
  76.                     8*sx,8*sy,
  77.                     &Machine->drv->visible_area,TRANSPARENCY_NONE,0);
  78.         }
  79.     }
  80.  
  81.  
  82.     /* copy the character mapped graphics */
  83.     copybitmap(bitmap,tmpbitmap,0,0,0,0,&Machine->drv->visible_area,TRANSPARENCY_NONE,0);
  84. }
  85.